【Java编程系列】使用List集合对百万数据量高效快速过滤去重筛选 |
您所在的位置:网站首页 › java 集合过滤 › 【Java编程系列】使用List集合对百万数据量高效快速过滤去重筛选 |
热门系列:
【Java编程系列】WebService的使用 【Java编程系列】在Spring MVC中使用工具类调用Service层时,Service类为null如何解决 【Java编程系列】Spring中使用代码实现动态切换主从库(多数据源) 【Java编程系列】log4j配置日志按级别分别生成日志文件 【Java编程系列】使用Java进行串口SerialPort通讯 【Java编程系列】comet4j服务器推送实现 【Java编程系列】使用JavaMail通过SMTP协议发送局域网(内网)邮件 【Java编程系列】解决Java获取前端URL中加号(+)被转换成空格的问题 【Java编程系列】Java自定义标签-Tag 【Java编程系列】Java与Mysql数据类型对应表 【Java编程系列】二进制如何表示小数?0.3+0.6为什么不等于0.9?纳尼!!! 程序人生,精彩抢先看
1.序言
前段时间,接到一个需求。需要将微信公众号的粉丝批量分组。当时需要分组的粉丝用户量达到250W左右,但通过和我们的业务数据库中筛选出来的不合格用户粉丝,需要从250W粉丝中过滤去重。不合格的粉丝数有80W条左右,也就是最终需要筛选出需要分组的粉丝数为170W左右。如此一下,两个大数据集合对比筛选就需要考虑效率问题了! 2.过程①一开始尝试了一下双重for循环大法,那结果,酸爽无比。程序直接把CPU喂饱了。。。。如此肯定是不可取的。 ②使用Iterator迭代器,通过单循,并使用list的contains方法,来筛选。代码如下: Iterator fensiIterator = fensiList.iterator(); String temp = null; while (fensiIterator.hasNext()){ temp = fensiIterator.next().toString(); if(openIds.contains(temp)){ fensiIterator.remove(); } }效率也很差,但比第一种稍微好一丢丢 ③加强版来啦(推荐)!!!!先上代码: //250W数据list集合转换成set集合 HashSet fensiSet = new HashSet(fensiList); //80W从数据库筛选出来不合符条件,需要过滤掉的用户list集合 HashSet removeSet = new HashSet(openIds); //去重操作 fensiSet.removeAll(removeSet); //清空原有list,并装入过滤后的数据set集合 fensiList.clear(); fensiList.addAll(fensiSet);已经加上了注释,大家应该可以一目了然吧! 咱们来分析一下,为啥set如此之快!查贴发现,原来set的HashSet.contains()方法,底层是通过HashMap来实现的。而HashMap的查找速度是很快的。虽然list也有removeAll()方法,但是与set的removeAll()方法相比,底层实现不同,也导致效率差异明显。 本博客皆为学习、分享、探讨为本,欢迎各位朋友评论、点赞、收藏、关注,一起加油!
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |